// 导入 NestJS 公共模块中的可注入装饰器、守卫接口、执行上下文和未授权异常类
import { Injectable, CanActivate, ExecutionContext, UnauthorizedException } from '@nestjs/common';
// 导入 RxJS 中的 Observable 类型
import { Observable } from 'rxjs';

// 标记该类为可注入的，可用于依赖注入
@Injectable()
// 定义一个认证守卫类，实现 CanActivate 接口
export class AuthGuard implements CanActivate {
  // 实现 canActivate 方法，用于判断请求是否被允许通过
  canActivate(
    // 传入执行上下文对象
    context: ExecutionContext,
  ): boolean | Promise<boolean> | Observable<boolean> {
    // 从执行上下文中获取 HTTP 请求对象
    const request = context.switchToHttp().getRequest();
    // 检查请求头中是否包含认证令牌
    if (!request.headers.authorization) {
      // 若不包含认证令牌，抛出未授权异常
      throw new UnauthorizedException('No authentication token provided');
    }
    // 实际应用中应该验证token
    return true;
  }
}